package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gen"
    "gorm.io/gorm"
)

func main() {
    db, err := gorm.Open(mysql.New(mysql.Config{
        DSN: fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
            "gkorder",
            "UTT3jBEP34vvsrdk",
            "192.168.1.115",
            3306,
            "gorder",
        ), // DSN data source name
        // DefaultStringSize:         256,                                                                        // string 类型字段的默认长度
        // DisableDatetimePrecision:  true,                                                                       // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
        // DontSupportRenameIndex:    true,                                                                       // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
        // DontSupportRenameColumn:   true,                                                                       // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
        // SkipInitializeWithVersion: false,                                                                      // 根据当前 MySQL 版本自动配置
    }), &gorm.Config{})

    if err != nil {
        panic(err)
    }

    // 初始化生成器
    g := gen.NewGenerator(gen.Config{
        // OutPath:      "./model/db", // 输出路径
        ModelPkgPath: "./model/db",
        Mode:         gen.WithoutContext, // 生成模式
    })

    // 使用数据库连接
    g.UseDB(db)

    // 通过表名生成模型
    // 这里替换成你的表名
    g.GenerateModel("gk_order_info")
    // g.GenerateModel("gk_order_info",
    //     gen.FieldGORMTag("created_at", func(tag field.GormTag) field.GormTag {
    //         return tag.Append("autoCreateTime") // 添加自动创建时间标签
    //     }),
    //     gen.FieldType("status", "enum.types.UserStatus"), // 自定义字段类型
    //     gen.FieldIgnore("deleted_at"),                    // 忽略 deleted_at 字段
    // )
    // 可以添加更多表...

    // 执行生成
    g.Execute()
}
